package com.micro.common.biz;

import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * 隐秘数据工具类
 * @author  LevelCoder
 * @email LevelCoder@126.com
 */
public class HideDataUtil {

    private static final String REPLACE_SYMBOL = "*";

    /**
     * 隐藏 一段字符串 用 * 代替 并返回
     * @param params          需要做加密替换的参数 可以为银行卡号,身份证号,手机号
     * @param beforeLength   不做替换的前几位
     * @param afterLength    不做替换的后几位
     * @return
     */
    public static Map<String,Object> hideParamsNo(String params,int beforeLength,int afterLength) {
        Map<String,Object> map = new HashMap<String,Object>();
        if(StringUtils.isBlank(params)) {
            return map;
        }
        int length = params.length();
        StringBuffer replaceAfter = new StringBuffer();
        StringBuffer replactParams = new StringBuffer();
        for(int i=0; i<length; i++) {
            if(i < beforeLength || i >= (length - afterLength)) {
                replaceAfter.append(params.charAt(i));
            } else {
                replactParams.append(params.charAt(i));
                replaceAfter.append(REPLACE_SYMBOL);
            }
        }

        //replaceAfter 加密后   replactParams被加密的参数
        map.put("replaceAfter",replaceAfter);
        map.put("replactParams",replactParams);
        return map;
    }


    /**
     * 隐藏 一段字符串 用 * 代替 并返回
     * @param params     需要做加密替换的参数 可以为银行卡号,身份证号,手机号
     * @param hideType   进行替换的类别   phone 手机号 icard 身份证号 bcard 银行卡号
     * @return
     */
    public static String hideParamsNo(String params,String hideType){
        if(StringUtils.isBlank(params)) {
            return null;
        }
        int length = params.length();
        StringBuffer replaceAfter = new StringBuffer();
        switch (hideType){
            case "phone":
                replaceAfter = hideParamsPhone(params,length);
                break;
            case "icard":
                replaceAfter = hideParamsIcard(params,length);
                break;
            default:
                return null;
        }
        return replaceAfter.toString();
    }

    /**
     * 身份证号加密替换
     * @param params
     * @param length
     * @return
     */
    private static StringBuffer hideParamsIcard(String params, int length) {
        return null;
    }

    /**
     * 手机号加密
     * @param params
     * @param length
     * @return
     */
    private static StringBuffer hideParamsPhone(String params, int length) {
        StringBuffer replaceAfter = new StringBuffer();
        for(int i=0; i<length; i++) {
            if(i < 3 || i >= (length - 4)) {
                replaceAfter.append(params.charAt(i));
            } else {
                replaceAfter.append(REPLACE_SYMBOL);
            }
        }
        return replaceAfter;
    }


    public static void main(String[] args) {

        System.out.println(hideParamsNo("18701346478","phone"));

    }
}
